Set the working directory to H:/Projects/11000/11187/TS/Task 3.

Load the Scott_County_CR78_trips_78.csv file.

The dimensions of the CR_78 dataset are 2063 rows and 20 columns. The dimensions of the CR_42 dataset are 994 rows and 20 columns.

Two combinations of links were used for analysis. The segments were loaded from the File Geodatabase on the H Drive project folder, H:/Projects/11000/11187/TS/Task 3/Scott County.gdb.

The segment for CR_42 included 18 links. The segment for CR_42 included 20 links.

CR_78 and CR_42 Analysis Links

CR_78 and CR_42 Analysis Links

Scott County

CR_78

The data was collected between 2015-08-31 and 2015-11-30.

g <- tripflag_summary_42 %>% 
  mutate(in_model = Total_Dist<40)%>%
  ggplot(aes(x=in_model))+
  geom_bar(stat = 'count')+
  labs(title='Trips less than 40 miles',x='',y='Total Count')+
  scale_y_continuous(breaks = seq(0,900,50))+
  theme(plot.title = element_text(hjust = 0.5))
ggplotly(g)
gg <-  ggplot(tripflag_summary_42[tripflag_summary_42$Total_Dist<40,])+
  geom_histogram(aes(x=Total_Dist),color='black',fill='white',binwidth = 2)+
  labs(title="Total Trip Distance histogram plot",
       x="Total Distance (miles)",y = "Count")+
  scale_y_continuous(breaks = seq(0,1500,20))
  
ggplotly(gg)

Start Locations:

End Locations:

CR_42

The data was collected between 2015-08-31 and 2015-11-30.

b <- tripflag_summary_78 %>% 
  mutate(in_model = Total_Dist<40)%>%
  ggplot(aes(x=in_model))+
  geom_bar(stat = 'count')+
  labs(title='Trips less than 40 miles',x='',y='Total Count')+
  scale_y_continuous(breaks = seq(0,1500,50))+
  theme(plot.title = element_text(hjust = 0.5))
ggplotly(b)
gg <-  ggplot(tripflag_summary_78[tripflag_summary_78$Total_Dist<40,])+
  geom_histogram(aes(x=Total_Dist),color='black',fill='white',binwidth = 2)+
  labs(title="Total Trip Distance histogram plot",
       x="Total Distance (miles)",
       y = "Count")+
  scale_y_continuous(breaks = seq(0,400,20))
  
ggplotly(gg)

Start Locations:

End Locations:

LS0tDQp0aXRsZTogIlRyaXAgRnJlcSBBbmFseXNpcyINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCmBgYHtyLGVjaG89RkFMU0UsaW5jbHVkZT1GQUxTRX0NCmxpYnJhcnkobWFncml0dHIpDQpsaWJyYXJ5KHNjYWxlcykNCmxpYnJhcnkoc3RyaW5ncikNCmxpYnJhcnkoZm9yZWNhc3QpDQpsaWJyYXJ5KGxlYWZsZXQpDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkocmVzaGFwZTIpDQpsaWJyYXJ5KHBsb3RseSkNCmxpYnJhcnkobHVicmlkYXRlKQ0KbGlicmFyeShrYWJsZUV4dHJhKQ0KbGlicmFyeShEVCkNCmxpYnJhcnkocmdkYWwpDQpvcHRpb25zKGtuaXRyLnRhYmxlLmZvcm1hdCA9ICJodG1sIikgDQpgYGANCg0KDQpTZXQgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHRvIEg6L1Byb2plY3RzLzExMDAwLzExMTg3L1RTL1Rhc2sgMy4NCg0KYGBge3IgJ3NldHVwJyxpbmNsdWRlPUZBTFNFfQ0KcmVxdWlyZShrbml0cikNCm9wdHNfa25pdCRzZXQocm9vdC5kaXIgPSAiSDovUHJvamVjdHMvMTEwMDAvMTExODcvVFMvVGFzayAzL1IiKQ0KZGlyKCkNCmBgYA0KDQoNCkxvYWQgdGhlIFNjb3R0X0NvdW50eV9DUjc4X3RyaXBzXzc4LmNzdiBmaWxlLg0KDQpgYGB7cixlY2hvPUZBTFNFLGluY2x1ZGU9RkFMU0V9DQoNCg0KQ1JfNzggPC0gcmVhZC5jc3YoIkg6L1Byb2plY3RzLzExMDAwLzExMTg3L1RTL1Rhc2sgMy9DUiA3OC9zY290dF9jb3VudHlfQ1I3OF90cmlwcy5jc3YiLHN0cmluZ3NBc0ZhY3RvcnMgPSBGQUxTRSklPiUNCiAgbXV0YXRlKERhdGU9eW1kX2htcyhzdGFydF9kYXRlX2NlbnRyYWwsdHo9IlVTL0NlbnRyYWwiKSkNCg0KTGlua19kaXN0Xzc4IDwtICByZWFkeGw6OnJlYWRfeGxzeCgnSDovUHJvamVjdHMvMTEwMDAvMTExODcvVFMvVGFzayAzL0NSIDc4L3Njb3R0X2NvdW50eV9DUjc4X3RyaXBzLnhsc3gnLHNoZWV0ID0gJ0xpbmtEaXN0YW5jZXMnKQ0KDQpDUl80MiA8LSByZWFkLmNzdigiSDovUHJvamVjdHMvMTEwMDAvMTExODcvVFMvVGFzayAzL0NSIDQyL3Njb3R0X2NvdW50eV9DUjQyX3RyaXBzLmNzdiIsc3RyaW5nc0FzRmFjdG9ycyA9IEZBTFNFKSU+JQ0KICBtdXRhdGUoRGF0ZT15bWRfaG1zKHN0YXJ0X2RhdGVfY2VudHJhbCx0ej0iVVMvQ2VudHJhbCIpKQ0KDQpMaW5rX2Rpc3RfNDIgPC0gIHJlYWR4bDo6cmVhZF94bHN4KCdIOi9Qcm9qZWN0cy8xMTAwMC8xMTE4Ny9UUy9UYXNrIDMvQ1IgNDIvc2NvdHRfY291bnR5X0NSNDJfdHJpcHMueGxzeCcsc2hlZXQgPSAnTGlua0Rpc3RhbmNlcycpDQoNCmBgYA0KDQpUaGUgZGltZW5zaW9ucyBvZiB0aGUgQ1JfNzggZGF0YXNldCBhcmUgYHIgcGFzdGUoZGltKENSXzc4KVsxXSwncm93cyBhbmQnLGRpbShDUl83OClbMl0sJ2NvbHVtbnMnKWAuDQpUaGUgZGltZW5zaW9ucyBvZiB0aGUgQ1JfNDIgZGF0YXNldCBhcmUgYHIgcGFzdGUoZGltKENSXzQyKVsxXSwncm93cyBhbmQnLGRpbShDUl80MilbMl0sJ2NvbHVtbnMnKWAuDQoNCg0KYGBge3IsZWNobz1GQUxTRSxpbmNsdWRlPUZBTFNFfQ0KDQpmZ2RiIDwtICJIOi9Qcm9qZWN0cy8xMTAwMC8xMTE4Ny9UUy9UYXNrIDMvU2NvdHQgQ291bnR5LmdkYiINCkNSXzc4X3NlZyA8LSByZWFkT0dSKGRzbj1mZ2RiLGxheWVyPSJDUl83OF9zZWciKQ0KQ1JfNDJfc2VnIDwtIHJlYWRPR1IoZHNuPWZnZGIsbGF5ZXI9IkNSXzQyX3NlZyIpDQoNCmBgYA0KDQpUd28gY29tYmluYXRpb25zIG9mIGxpbmtzIHdlcmUgdXNlZCBmb3IgYW5hbHlzaXMuIFRoZSBzZWdtZW50cyB3ZXJlIGxvYWRlZCBmcm9tIHRoZSBGaWxlIEdlb2RhdGFiYXNlIG9uIHRoZSBIIERyaXZlIHByb2plY3QgZm9sZGVyLCBgciBmZ2RiYC4NCg0KVGhlIHNlZ21lbnQgZm9yIENSXzQyIGluY2x1ZGVkIGByIGRpbShDUl83OF9zZWcpWzFdYCBsaW5rcy4NClRoZSBzZWdtZW50IGZvciBDUl80MiBpbmNsdWRlZCBgciBkaW0oQ1JfNDJfc2VnKVsxXWAgbGlua3MuDQoNCiFbQ1JfNzggYW5kIENSXzQyIEFuYWx5c2lzIExpbmtzXShTZWdtZW50X092ZXJ2aWV3LnBuZykNCg0KYGBge3IsIGVjaG89RkFMU0Usd2FybmluZz1GQUxTRSxpbmNsdWRlPUZBTFNFfQ0KQ1JfNzhfeCA8LSAgQ1JfNzggJT4lDQogIHNlbGVjdCgtcGF0aCxldmVyeXRoaW5nKCkpJT4lDQogIHNlcGFyYXRlKHBhdGgscmVtb3ZlID0gRkFMU0Usc2VwPScjJyxpbnRvID0gcGFzdGUoJ1YnLGMoMToxMDAwKSxzZXAgPSAnJykpDQoNCnNpemUgPC0gc2FwcGx5KENSXzc4X3gsZnVuY3Rpb24oeClhbGwoaXMubmEoeCkpKQ0KbWluKHdoaWNoKHNpemU9PVRSVUUpKQ0KY29sbmFtZXMoQ1JfNzhfeClbbWluKHdoaWNoKHNpemU9PVRSVUUpKV0NCg0KQ1JfNDJfeCA8LSAgbXV0YXRlKENSXzQyLERhdGU9eW1kX2htcyhzdGFydF9kYXRlX2NlbnRyYWwsdHo9IlVTL0NlbnRyYWwiKSklPiUNCiAgc2VsZWN0KC1wYXRoLGV2ZXJ5dGhpbmcoKSklPiUNCiAgc2VwYXJhdGUocGF0aCxyZW1vdmUgPSBGQUxTRSxzZXA9JyMnLGludG8gPSBwYXN0ZSgnVicsYygxOjEwMDApLHNlcCA9ICcnKSkNCg0Kc2l6ZSA8LSBzYXBwbHkoQ1JfNDJfeCxmdW5jdGlvbih4KWFsbChpcy5uYSh4KSkpDQptaW4od2hpY2goc2l6ZT09VFJVRSkpDQpjb2xuYW1lcyhDUl80Ml94KVttaW4od2hpY2goc2l6ZT09VFJVRSkpXQ0KYGBgDQoNCmBgYHtyLGVjaG89RkFMU0Usd2FybmluZz1GQUxTRX0NCg0KY29sXzc4IDwtIGNvbG5hbWVzKENSXzc4X3gpJWluJSBwYXN0ZSgnVicsYygxOjI5Nyksc2VwPScnKQ0KDQp0cmlwX2NvbXBvbmVudHNfNzggPC0gIG1lbHQoQ1JfNzhfeCxpZC52YXJzID0gYygndHJpcF9pZCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3RhcnRfbGF0aXR1ZGUnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0YXJ0X2xvbmdpdHVkZScsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5kX2xhdGl0dWRlJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbmRfbG9uZ2l0dWRlJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdEYXRlJyksDQogICAgICAgICAgICAgICAgICAgICAgICBtZWFzdXJlLnZhcnMgPSBjb2xuYW1lcyhDUl83OF94KVtjb2xfNzhdLA0KICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUubmFtZSA9ICdBK0InLA0KICAgICAgICAgICAgICAgICAgICAgICAgc2VwPScnKSANCg0KdHJpcF9jb21wb25lbnRzXzc4IDwtICAgbWVyZ2UodHJpcF9jb21wb25lbnRzXzc4LExpbmtfZGlzdF83OCxieT0nQStCJykgJT4lIGFycmFuZ2UodHJpcF9pZCkNCg0KIyMjdHJpcHNfNzggY2FuIGdvIHRocm91Z2ggb3VyIHNlZ21lbnQNCiMjI3RyaXBzXzc4IDwtIGZpbHRlcih0cmlwX2NvbXBvbmVudHNfNzgsdHJpcF9jb21wb25lbnRzXzc4JGBBK0JgICVpbiUgQ1JfNzhfc2VnJExpbmspDQojIyMjdHJpcF9pZHMgPC0gdHJpcHNfNzhbIWR1cGxpY2F0ZWQodHJpcHNfNzgkdHJpcF9pZCksXQ0KDQpjb2xfNDIgPC0gY29sbmFtZXMoQ1JfNDJfeCklaW4lIHBhc3RlKCdWJyxjKDE6MjcwKSxzZXA9JycpDQoNCnRyaXBfY29tcG9uZW50c180MiA8LSAgbWVsdChDUl80Ml94LGlkLnZhcnMgPSBjKCd0cmlwX2lkJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdGFydF9sYXRpdHVkZScsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3RhcnRfbG9uZ2l0dWRlJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbmRfbGF0aXR1ZGUnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZF9sb25naXR1ZGUnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0RhdGUnKSwNCiAgICAgICAgICAgICAgICAgICAgICAgIG1lYXN1cmUudmFycyA9IGNvbG5hbWVzKENSXzQyX3gpW2NvbF80Ml0sDQogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5uYW1lID0gJ0ErQicsDQogICAgICAgICAgICAgICAgICAgICAgICBzZXA9JycpIA0KDQp0cmlwX2NvbXBvbmVudHNfNDIgPC0gICBtZXJnZSh0cmlwX2NvbXBvbmVudHNfNDIsTGlua19kaXN0XzQyLGJ5PSdBK0InKSAlPiUgYXJyYW5nZSh0cmlwX2lkKQ0KDQpybShDUl83OF94LENSXzQyX3gpDQoNCmBgYA0KDQpgYGB7cixlY2hvPUZBTFNFLHdhcm5pbmc9RkFMU0V9DQojIyNmaW5kIHRoZSB0b3RhbCBkaXN0YW5jZSBmb3IgZWFjaCBUcmlwDQp0cmlwZmxhZ19zdW1tYXJ5Xzc4IDwtIHRyaXBfY29tcG9uZW50c183OCAlPiUNCiAgZ3JvdXBfYnkodHJpcF9pZCklPiUNCiAgc3VtbWFyaXNlKFRvdGFsX0Rpc3QgPSBzdW0oRElTVEFOQ0UpKSU+JQ0KICBhcnJhbmdlKGRlc2MoVG90YWxfRGlzdCkpDQoNCnRyaXBmbGFnX3N1bW1hcnlfNzggPC0gbWVyZ2UodHJpcGZsYWdfc3VtbWFyeV83OCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1JfNzhbLGMoInRyaXBfaWQiLCJEYXRlIiwic3RhcnRfbGF0aXR1ZGUiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3RhcnRfbG9uZ2l0dWRlIiwiZW5kX2xhdGl0dWRlIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVuZF9sb25naXR1ZGUiKV0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5PSd0cmlwX2lkJykNCg0KIyMjZGF0YXRhYmxlKHRyaXBmbGFnX3N1bW1hcnlfNzgsZmlsdGVyPSd0b3AnKQ0KDQojIyNmaW5kIHRoZSB0b3RhbCBkaXN0YW5jZSBmb3IgZWFjaCBUcmlwDQp0cmlwZmxhZ19zdW1tYXJ5XzQyIDwtIHRyaXBfY29tcG9uZW50c180MiAlPiUNCiAgZ3JvdXBfYnkodHJpcF9pZCklPiUNCiAgc3VtbWFyaXNlKFRvdGFsX0Rpc3QgPSBzdW0oRElTVEFOQ0UpKSU+JQ0KICBhcnJhbmdlKGRlc2MoVG90YWxfRGlzdCkpDQoNCnRyaXBmbGFnX3N1bW1hcnlfNDIgPC0gbWVyZ2UodHJpcGZsYWdfc3VtbWFyeV80MiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1JfNDJbLGMoInRyaXBfaWQiLCJEYXRlIiwic3RhcnRfbGF0aXR1ZGUiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3RhcnRfbG9uZ2l0dWRlIiwiZW5kX2xhdGl0dWRlIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVuZF9sb25naXR1ZGUiKV0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5PSd0cmlwX2lkJykNCg0KIyMjZGF0YXRhYmxlKHRyaXBmbGFnX3N1bW1hcnlfNDIsZmlsdGVyPSd0b3AnKQ0KDQpgYGANCg0KDQpgYGB7cixlY2hvPUZBTFNFLHdhcm5pbmc9RkFMU0V9DQojIyNhdHRhY2hlZCB0b3RhbCB0cmlwIGRpc3RhbmNlIHRvIGVhY2ggbGluaw0KIyMjZmlsdGVyIHRoZSB0cmlwcyBmb3Igb25seSBvdXIgdHJpcHMgb2YgaW50ZXJlc3QgaW4gc2VnbWVudCA0Mg0KdHJpcF9jb21wX21lcmdlXzc4IDwtIG1lcmdlKHRyaXBfY29tcG9uZW50c183OCx0cmlwZmxhZ19zdW1tYXJ5Xzc4LA0KICAgICAgICAgICAgICAgICAgICAgICAgIGJ5Lng9J3RyaXBfaWQnLGJ5Lnk9J3RyaXBfaWQnLGFsbC54PVRSVUUpJT4lDQogIGFycmFuZ2UoZGVzYyhUb3RhbF9EaXN0KSklPiUNCiAgZmlsdGVyKGBBK0JgICVpbiUgQ1JfNzhfc2VnJExpbmspJT4lDQogIGZpbHRlcihUb3RhbF9EaXN0PDQwKQ0KDQojIyNzdW1tYXJpc2UgdGhlIHRyaXAgZGlzdGFuY2VzIGJ5IG91ciBsaW5rcyANCiMjI3RoaXMgc3VtbWFyeSBpcyBmb3IgdHJpcHMgbGVzcyB0aGFuIDUwIG1pbGVzLg0KIyMjdHJpcCB0b3RhbCBkaXN0YW5jZSBpcyBub3QgYWNjdXJhdGUgb3V0c2lkZSBvZiB0aGlzIHJhbmdlLiANCmxpbmtfZGV0YWlsc183OCA8LSB0cmlwX2NvbXBfbWVyZ2VfNzggJT4lIGdyb3VwX2J5KGBBK0JgKSAlPiUNCiAgc3VtbWFyaXNlKE1lYW4gPSBtZWFuKFRvdGFsX0Rpc3QpLA0KICAgICAgICAgICAgTWF4ID0gbWF4KFRvdGFsX0Rpc3QpLA0KICAgICAgICAgICAgTWluID0gbWluKFRvdGFsX0Rpc3QpLA0KICAgICAgICAgICAgU3RkID0gc2QoVG90YWxfRGlzdCkpDQoNCiMjI2RhdGF0YWJsZSh0cmlwc183OCxmaWx0ZXI9J3RvcCcpDQoNCiMjI2F0dGFjaGVkIHRvdGFsIHRyaXAgZGlzdGFuY2UgdG8gZWFjaCBsaW5rDQojIyNmaWx0ZXIgdGhlIHRyaXBzIGZvciBvbmx5IG91ciB0cmlwcyBvZiBpbnRlcmVzdCBpbiBzZWdtZW50IDQyDQp0cmlwX2NvbXBfbWVyZ2VfNDIgPC0gbWVyZ2UodHJpcF9jb21wb25lbnRzXzQyLHRyaXBmbGFnX3N1bW1hcnlfNDIsDQogICAgICAgICAgICAgICAgICAgICAgICAgYnkueD0ndHJpcF9pZCcsYnkueT0ndHJpcF9pZCcsYWxsLng9VFJVRSklPiUNCiAgYXJyYW5nZShkZXNjKFRvdGFsX0Rpc3QpKSU+JQ0KICBmaWx0ZXIoYEErQmAgJWluJSBDUl80Ml9zZWckTGluayklPiUNCiAgZmlsdGVyKFRvdGFsX0Rpc3Q8NDApDQoNCiMjI3N1bW1hcmlzZSB0aGUgdHJpcCBkaXN0YW5jZXMgYnkgb3VyIGxpbmtzIA0KIyMjdGhpcyBzdW1tYXJ5IGlzIGZvciB0cmlwcyBsZXNzIHRoYW4gNTAgbWlsZXMuDQojIyN0cmlwIHRvdGFsIGRpc3RhbmNlIGlzIG5vdCBhY2N1cmF0ZSBvdXRzaWRlIG9mIHRoaXMgcmFuZ2UuIA0KbGlua19kZXRhaWxzXzQyIDwtIHRyaXBfY29tcF9tZXJnZV80MiAlPiUgZ3JvdXBfYnkoYEErQmApICU+JQ0KICBzdW1tYXJpc2UoTWVhbiA9IG1lYW4oVG90YWxfRGlzdCksDQogICAgICAgICAgICBNYXggPSBtYXgoVG90YWxfRGlzdCksDQogICAgICAgICAgICBNaW4gPSBtaW4oVG90YWxfRGlzdCksDQogICAgICAgICAgICBTdGQgPSBzZChUb3RhbF9EaXN0KSkNCg0KDQojIyNkYXRhdGFibGUodHJpcHNfNDIsZmlsdGVyPSd0b3AnKQ0KDQoNCmBgYA0KDQoNCiMjIFNjb3R0IENvdW50eSB7LnRhYnNldCAudGFic2V0LWZhZGV9DQoNCiMjIyBDUl83OA0KDQpUaGUgZGF0YSB3YXMgY29sbGVjdGVkIGJldHdlZW4gYHIgZm9ybWF0KG1pbihDUl83OCREYXRlKSwnJVktJW0tJWQnKWAgYW5kIGByIGZvcm1hdChtYXgoQ1JfNzgkRGF0ZSksJyVZLSVtLSVkJylgLg0KDQpgYGB7cixlY2hvPUZBTFNFLGZpZy5oZWlnaHQ9NX0NCg0KQ1JfNzhfcGxvdCA8LSBtZXJnZShDUl83OF9zZWcsbGlua19kZXRhaWxzXzc4LGJ5Lng9J0xpbmsnLGJ5Lnk9J0ErQicpDQoNCkNSXzc4X3Bsb3QkbGFiZWwgPC0gcGFzdGUoQ1JfNzhfcGxvdCRBQiwnTWVhbiBEaXN0OicsYXMuY2hhcmFjdGVyKHJvdW5kKENSXzc4X3Bsb3QkTWVhbiwyKSkpDQoNCmxlYWZsZXQoZGF0YT1DUl83OF9wbG90LHdpZHRoID0gJzEwMCUnKSAlPiUNCiAgc2V0VmlldyhsbmcgPSAtOTMuNTUwODI1LCBsYXQgPSAgNDQuNzcxNjE0LCB6b29tID0gMTMpJT4lDQogIGFkZFBvbHlsaW5lcyhoaWdobGlnaHRPcHRpb25zID0gaGlnaGxpZ2h0T3B0aW9ucyhjb2xvciA9ICJ3aGl0ZSIsIHdlaWdodCA9IDIsDQogICAgICBicmluZ1RvRnJvbnQgPSBUUlVFKSxsYWJlbD1+bGFiZWwpICU+JSANCiAgYWRkUHJvdmlkZXJUaWxlcyhwcm92aWRlcnMkT3BlblN0cmVldE1hcCkNCg0KYGBgDQoNCmBgYHtyLGZpZy53aWR0aD04LGZpZy5oZWlnaHQ9NX0NCg0KZyA8LSB0cmlwZmxhZ19zdW1tYXJ5XzQyICU+JSANCiAgbXV0YXRlKGluX21vZGVsID0gVG90YWxfRGlzdDw0MCklPiUNCiAgZ2dwbG90KGFlcyh4PWluX21vZGVsKSkrDQogIGdlb21fYmFyKHN0YXQgPSAnY291bnQnKSsNCiAgbGFicyh0aXRsZT0nVHJpcHMgbGVzcyB0aGFuIDQwIG1pbGVzJyx4PScnLHk9J1RvdGFsIENvdW50JykrDQogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoMCw5MDAsNTApKSsNCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpDQpnZ3Bsb3RseShnKQ0KYGBgDQoNCmBgYHtyLGZpZy53aWR0aD04LGZpZy5oZWlnaHQ9NX0NCmdnIDwtICBnZ3Bsb3QodHJpcGZsYWdfc3VtbWFyeV80Mlt0cmlwZmxhZ19zdW1tYXJ5XzQyJFRvdGFsX0Rpc3Q8NDAsXSkrDQogIGdlb21faGlzdG9ncmFtKGFlcyh4PVRvdGFsX0Rpc3QpLGNvbG9yPSdibGFjaycsZmlsbD0nd2hpdGUnLGJpbndpZHRoID0gMikrDQogIGxhYnModGl0bGU9IlRvdGFsIFRyaXAgRGlzdGFuY2UgaGlzdG9ncmFtIHBsb3QiLA0KICAgICAgIHg9IlRvdGFsIERpc3RhbmNlIChtaWxlcykiLHkgPSAiQ291bnQiKSsNCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLDE1MDAsMjApKQ0KICANCmdncGxvdGx5KGdnKQ0KDQpgYGANCg0KDQpTdGFydCBMb2NhdGlvbnM6DQpgYGB7cixlY2hvPUZBTFNFLGZpZy5oZWlnaHQ9NX0NCmljb25fc3RhcnQgPC0gbWFrZUljb24oJ2ljb25fc3RhcnQucG5nJyxpY29uV2lkdGggPSAxMCwgaWNvbkhlaWdodCA9IDgpDQppY29uX2VuZCA8LSBtYWtlSWNvbignaWNvbl9lbmQucG5nJyxpY29uV2lkdGggPSAxMCwgaWNvbkhlaWdodCA9IDgpDQpkYXRhIDwtIHRyaXBmbGFnX3N1bW1hcnlfNzggJT4lZmlsdGVyKFRvdGFsX0Rpc3Q8NDApDQoNCmxpc3RfcmFkaXVzIDwtIGxpc3QoMTYwOS4zNCo1LDE2MDkuMzQqMTAsMTYwOS4zNCoyMCwxNjA5LjM0KjQwKQ0KbGlzdF9sYWJlbCA8LSBsaXN0KCc1IG1pbGVzJywnMTAgbWlsZXMnLCcyMCBtaWxlcycsJzQwIG1pbGVzJykNCmBgYA0KDQpgYGB7cixlY2hvPUZBTFNFLGZpZy5oZWlnaHQ9NX0NCg0KbGVhZmxldChkYXRhPWRhdGEsd2lkdGggPSAnMTAwJScpICU+JQ0KICBzZXRWaWV3KGxuZyA9IC05My41MDUwOCwgbGF0ID0gIDQ0Ljc1MzAxOSwgem9vbSA9IDEwKSU+JQ0KICBhZGRUaWxlcygpICU+JSANCiAgYWRkTWFya2Vycyh+c3RhcnRfbG9uZ2l0dWRlLH5zdGFydF9sYXRpdHVkZSxpY29uID0gaWNvbl9zdGFydCxsYWJlbD1+dHJpcF9pZCkgJT4lDQogIGFkZENpcmNsZXMobG5nID0gLTkzLjUwNTA4LCBsYXQgPSAgNDQuNzUzMDE5LHJhZGl1cyA9IGxpc3RfcmFkaXVzLA0KICAgICAgICAgICAgIGZpbGxDb2xvciA9ICdub25lJyxsYWJlbCA9bGlzdF9sYWJlbCklPiUNCiAgYWRkUHJvdmlkZXJUaWxlcyhwcm92aWRlcnMkT3BlblN0cmVldE1hcCkNCg0KYGBgDQoNCg0KRW5kIExvY2F0aW9uczoNCg0KYGBge3IsZWNobz1GQUxTRSxmaWcuaGVpZ2h0PTV9DQoNCg0KbGVhZmxldChkYXRhPWRhdGEsd2lkdGggPSAnMTAwJScpICU+JQ0KICBzZXRWaWV3KGxuZyA9IC05My41MDUwOCwgbGF0ID0gIDQ0Ljc1MzAxOSwgem9vbSA9IDEwKSU+JQ0KICBhZGRUaWxlcygpICU+JSANCiAgYWRkTWFya2Vycyh+ZW5kX2xvbmdpdHVkZSx+ZW5kX2xhdGl0dWRlLGljb24gPSBpY29uX2VuZCxsYWJlbD1+dHJpcF9pZCkgJT4lDQogIGFkZENpcmNsZXMobG5nID0gLTkzLjUwNTA4LCBsYXQgPSAgNDQuNzUzMDE5LHJhZGl1cyA9IGxpc3RfcmFkaXVzLA0KICAgICAgICAgICAgIGZpbGxDb2xvciA9ICdub25lJyxsYWJlbCA9bGlzdF9sYWJlbCklPiUNCiAgYWRkUHJvdmlkZXJUaWxlcyhwcm92aWRlcnMkT3BlblN0cmVldE1hcCkNCg0KYGBgDQoNCg0KDQojIyMgQ1JfNDINCg0KDQpUaGUgZGF0YSB3YXMgY29sbGVjdGVkIGJldHdlZW4gYHIgZm9ybWF0KG1pbihDUl83OCREYXRlKSwnJVktJW0tJWQnKWAgYW5kIGByIGZvcm1hdChtYXgoQ1JfNzgkRGF0ZSksJyVZLSVtLSVkJylgLg0KDQpgYGB7cixlY2hvPUZBTFNFLGZpZy5oZWlnaHQ9NX0NCg0KQ1JfNDJfcGxvdCA8LSBtZXJnZShDUl80Ml9zZWcsbGlua19kZXRhaWxzXzQyLGJ5Lng9J0xpbmsnLGJ5Lnk9J0ErQicpDQoNCkNSXzQyX3Bsb3QkbGFiZWwgPC0gcGFzdGUoQ1JfNDJfcGxvdCRBQiwnTWVhbiBEaXN0OicsYXMuY2hhcmFjdGVyKHJvdW5kKENSXzQyX3Bsb3QkTWVhbiwyKSkpDQoNCmxlYWZsZXQoZGF0YT1DUl80Ml9wbG90LHdpZHRoID0gJzEwMCUnKSAlPiUNCiAgc2V0VmlldyhsbmcgPSAtOTMuNDY5NDkyLCBsYXQgPSAgNDQuNzQ2ODQ1LCB6b29tID0gMTMpJT4lDQogIGFkZFBvbHlsaW5lcyhoaWdobGlnaHRPcHRpb25zID0gaGlnaGxpZ2h0T3B0aW9ucyhjb2xvciA9ICJ3aGl0ZSIsIHdlaWdodCA9IDIsDQogICAgICBicmluZ1RvRnJvbnQgPSBUUlVFKSxsYWJlbD1+bGFiZWwpICU+JSANCiAgYWRkUHJvdmlkZXJUaWxlcyhwcm92aWRlcnMkT3BlblN0cmVldE1hcCkNCg0KYGBgDQoNCmBgYHtyLGZpZy53aWR0aD04LGZpZy5oZWlnaHQ9NX0NCg0KYiA8LSB0cmlwZmxhZ19zdW1tYXJ5Xzc4ICU+JSANCiAgbXV0YXRlKGluX21vZGVsID0gVG90YWxfRGlzdDw0MCklPiUNCiAgZ2dwbG90KGFlcyh4PWluX21vZGVsKSkrDQogIGdlb21fYmFyKHN0YXQgPSAnY291bnQnKSsNCiAgbGFicyh0aXRsZT0nVHJpcHMgbGVzcyB0aGFuIDQwIG1pbGVzJyx4PScnLHk9J1RvdGFsIENvdW50JykrDQogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoMCwxNTAwLDUwKSkrDQogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQ0KZ2dwbG90bHkoYikNCmBgYA0KDQoNCmBgYHtyLGZpZy53aWR0aD04LGZpZy5oZWlnaHQ9NX0NCmdnIDwtICBnZ3Bsb3QodHJpcGZsYWdfc3VtbWFyeV83OFt0cmlwZmxhZ19zdW1tYXJ5Xzc4JFRvdGFsX0Rpc3Q8NDAsXSkrDQogIGdlb21faGlzdG9ncmFtKGFlcyh4PVRvdGFsX0Rpc3QpLGNvbG9yPSdibGFjaycsZmlsbD0nd2hpdGUnLGJpbndpZHRoID0gMikrDQogIGxhYnModGl0bGU9IlRvdGFsIFRyaXAgRGlzdGFuY2UgaGlzdG9ncmFtIHBsb3QiLA0KICAgICAgIHg9IlRvdGFsIERpc3RhbmNlIChtaWxlcykiLA0KICAgICAgIHkgPSAiQ291bnQiKSsNCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLDQwMCwyMCkpDQogIA0KZ2dwbG90bHkoZ2cpDQoNCmBgYA0KDQpTdGFydCBMb2NhdGlvbnM6DQpgYGB7cixlY2hvPUZBTFNFLGZpZy5oZWlnaHQ9NX0NCmljb25fc3RhcnQgPC0gbWFrZUljb24oJ2ljb25fc3RhcnQucG5nJyxpY29uV2lkdGggPSAxMCwgaWNvbkhlaWdodCA9IDgpDQpkYXRhIDwtIHRyaXBmbGFnX3N1bW1hcnlfNDIlPiVmaWx0ZXIoVG90YWxfRGlzdDw0MCkNCg0KbGlzdF9yYWRpdXMgPC0gbGlzdCgxNjA5LjM0KjUsMTYwOS4zNCoxMCwxNjA5LjM0KjIwLDE2MDkuMzQqNDApDQpsaXN0X2xhYmVsIDwtIGxpc3QoJzUgbWlsZXMnLCcxMCBtaWxlcycsJzIwIG1pbGVzJywnNDAgbWlsZXMnKQ0KYGBgDQoNCmBgYHtyLGVjaG89RkFMU0UsZmlnLmhlaWdodD01fQ0KDQpsZWFmbGV0KGRhdGE9ZGF0YSx3aWR0aCA9ICcxMDAlJykgJT4lDQogIHNldFZpZXcobG5nID0gLTkzLjUwNTA4LCBsYXQgPSAgNDQuNzUzMDE5LCB6b29tID0gMTApJT4lDQogIGFkZFRpbGVzKCkgJT4lIA0KICBhZGRNYXJrZXJzKH5zdGFydF9sb25naXR1ZGUsfnN0YXJ0X2xhdGl0dWRlLGljb24gPSBpY29uX3N0YXJ0LGxhYmVsPX50cmlwX2lkKSAlPiUNCiAgYWRkQ2lyY2xlcyhsbmcgPSAtOTMuNTA1MDgsIGxhdCA9ICA0NC43NTMwMTkscmFkaXVzID0gbGlzdF9yYWRpdXMsDQogICAgICAgICAgICAgZmlsbENvbG9yID0gJ25vbmUnLGxhYmVsID1saXN0X2xhYmVsKSU+JQ0KICBhZGRQcm92aWRlclRpbGVzKHByb3ZpZGVycyRPcGVuU3RyZWV0TWFwKQ0KDQpgYGANCg0KDQpFbmQgTG9jYXRpb25zOg0KDQpgYGB7cixlY2hvPUZBTFNFLGZpZy5oZWlnaHQ9NX0NCg0KbGVhZmxldChkYXRhPWRhdGEsd2lkdGggPSAnMTAwJScpICU+JQ0KICBzZXRWaWV3KGxuZyA9IC05My41MDUwOCwgbGF0ID0gIDQ0Ljc1MzAxOSwgem9vbSA9IDEwKSU+JQ0KICBhZGRUaWxlcygpICU+JSANCiAgYWRkTWFya2Vycyh+ZW5kX2xvbmdpdHVkZSx+ZW5kX2xhdGl0dWRlLGljb24gPSBpY29uX2VuZCxsYWJlbD1+dHJpcF9pZCkgJT4lDQogIGFkZENpcmNsZXMobG5nID0gLTkzLjUwNTA4LCBsYXQgPSAgNDQuNzUzMDE5LHJhZGl1cyA9IGxpc3RfcmFkaXVzLA0KICAgICAgICAgICAgIGZpbGxDb2xvciA9ICdub25lJyxsYWJlbCA9bGlzdF9sYWJlbCklPiUNCiAgYWRkUHJvdmlkZXJUaWxlcyhwcm92aWRlcnMkT3BlblN0cmVldE1hcCkNCg0KYGBgDQo=